<!DOCTYPE html>
<html lang="en">
  <head>
      <meta charset="UTF-8">
      <title>函数使用细节</title>
      <script>
        //1. JS 中函数的重载会覆盖掉上一次的定义，也就是说JS函数没有重载
        function f1() {
          alert ("hi f1()");
        }
        function f1(name) {
          alert("hi " + name);
        }
        //当你调用f1() 时候其实调用的是 f1(name)
        //调用f1(name) 如果你没有传入实参, 那么这个name就是undefined
        f1(); //hi undefined


        // 2. 函数的 arguments 隐形参数（作用域在 function 函数内）
        // (1) 隐形参数: 在 function 函数中不需要定义，可以直接用来获取所有参数的变量。
        // (2) 隐形参数特别像 java 的可变参数一样。 public void fun( int ... args )
        // (3) js 中的隐形参数跟 java 的可变参数一样。操作类似数组
        function f2() {
          //遍历函数的 arguments 隐形参数
          //小技巧；
          //如果需要console.log()展示对象信息，使用,而不是+
          console.log("arguments= ", arguments);
          alert("f2()...");
        }
        f2(10, 20, 30);

        //3.如果函数有形参，在传入实参时，仍然按照顺序匹配
        //如果有匹配上，就赋给它。没有匹配上，也无所谓
        //无论是否匹配上，所有实参都会赋给arguments
        //如果形参个数大于实参个数，则该形参值为undefined
        function f3(n) {
          console.log("n=" + n);
          console.log("arguments= ", arguments);
        }
        f3(100, 90, 20);
      </script>
  </head>
  <body>

  </body>
</html>